gtk4.git
8 years agogtk-demo: Port clipboards example to new clipboard
Benjamin Otte [Sun, 26 Nov 2017 21:39:47 +0000 (22:39 +0100)]
gtk-demo: Port clipboards example to new clipboard

8 years agorecentchooser: Port to GdkClipboard
Benjamin Otte [Sun, 26 Nov 2017 06:54:55 +0000 (07:54 +0100)]
recentchooser: Port to GdkClipboard

8 years agolinkbutton: Port to GdkClipboard
Benjamin Otte [Sun, 26 Nov 2017 06:38:12 +0000 (07:38 +0100)]
linkbutton: Port to GdkClipboard

8 years agoa11y: Port to GdkClipboard
Benjamin Otte [Sun, 26 Nov 2017 06:35:19 +0000 (07:35 +0100)]
a11y: Port to GdkClipboard

8 years agowidget: Add gtk_widget_get_clipboard()
Benjamin Otte [Sat, 25 Nov 2017 22:55:34 +0000 (23:55 +0100)]
widget: Add gtk_widget_get_clipboard()

... and gtk_widget_get_primary_clipboard().

They both give out the new GdkClipboard.

8 years agowidget: gtk_widget_get_clipboard => gtk_widget_get_old_clipboard
Benjamin Otte [Sat, 25 Nov 2017 22:20:16 +0000 (23:20 +0100)]
widget: gtk_widget_get_clipboard => gtk_widget_get_old_clipboard

Just rename the function, so the previous one can be used for the
new clipboard.

8 years agotests: Open a 2nd display in testclipboard2
Benjamin Otte [Sat, 25 Nov 2017 21:54:32 +0000 (22:54 +0100)]
tests: Open a 2nd display in testclipboard2

This allows testing local transfer of data as well as remote transfer
(by transferring data between clipboards of both Displays).

8 years agox11: Implement claiming the X Selection with the clipboard
Benjamin Otte [Sat, 25 Nov 2017 20:59:39 +0000 (21:59 +0100)]
x11: Implement claiming the X Selection with the clipboard

... and of course support writing to other apps.

8 years agotests: Add possibility to set invalid UTF-8 and clear clipboard
Benjamin Otte [Sat, 25 Nov 2017 07:37:03 +0000 (08:37 +0100)]
tests: Add possibility to set invalid UTF-8 and clear clipboard

8 years agox11: Add gdk_x11_display_get_max_request_size()
Benjamin Otte [Sat, 25 Nov 2017 00:25:31 +0000 (01:25 +0100)]
x11: Add gdk_x11_display_get_max_request_size()

There's multiple places in the clipboard code where I need it, so make
it a custom function.

8 years agoclipboard: Allow claiming the clipboard to fail
Benjamin Otte [Fri, 24 Nov 2017 19:42:40 +0000 (20:42 +0100)]
clipboard: Allow claiming the clipboard to fail

Also make clipboard_claim() a vfunc so backends can override it.

Because the whole operation a vfunc, backends have the option of adding
code before the actual claim is done and potentially even fail or do
something after the successful claim.

8 years agogdkcontentformats: Change the matching API
Benjamin Otte [Fri, 24 Nov 2017 10:34:19 +0000 (11:34 +0100)]
gdkcontentformats: Change the matching API

Instead of having just one function that has the gtype and mime type as
out arguments, have 3 functions: 1 that finds any match, 1 that finds a
GType match and one for a mime type match.

This makes the API way more convenient to use.

8 years agoclipboard: Add serialization
Benjamin Otte [Fri, 24 Nov 2017 10:15:51 +0000 (11:15 +0100)]
clipboard: Add serialization

This completes the local clipboard code.

8 years agoclipboard: Implement local fallback clipboard transfers
Benjamin Otte [Fri, 24 Nov 2017 09:13:23 +0000 (10:13 +0100)]
clipboard: Implement local fallback clipboard transfers

This requires implementing a "pipe" so we can have 2 streams running:
  contentprovider => serializer => outputstream
  inputstream => deserializer => reader
And the pipe shoves the data from the outputstream into the inputstream.

8 years agoclipboard: Introduce GdkContentProvider
Benjamin Otte [Fri, 24 Nov 2017 05:17:37 +0000 (06:17 +0100)]
clipboard: Introduce GdkContentProvider

GdkContentProvider is the object that represents local data in the
clipboard.

This patch only introduces the object and adds the clipboard properties,
it does not yet provide a way for the actual implementations to access
it.

The only access that is implemented is the local shortcut GValue access.

8 years agoclipboard: Make value getters set the passed in value
Benjamin Otte [Fri, 24 Nov 2017 05:07:09 +0000 (06:07 +0100)]
clipboard: Make value getters set the passed in value

Don't return a const GValue, that's ugly API. Instead require people to
pass in a preinitialized GValue and set that one.

8 years agox11: Improve fallbacks for text
Benjamin Otte [Thu, 23 Nov 2017 00:59:19 +0000 (01:59 +0100)]
x11: Improve fallbacks for text

(1) Try all passed in formats in order if one of them fails.
(2) Don't blindly accept all formats, make sure they are mime types
(3) Add a bunch of special non-mime types that plug converters to
    get to mime types

8 years agoclipboard: Add gdk_clipboard_read_text_async()
Benjamin Otte [Wed, 22 Nov 2017 13:19:02 +0000 (14:19 +0100)]
clipboard: Add gdk_clipboard_read_text_async()

Also add deserializers for G_TYPE_STRING.

8 years agoclipboard: Add gdk_clipboard_read_pixbuf_async()
Benjamin Otte [Wed, 22 Nov 2017 12:21:25 +0000 (13:21 +0100)]
clipboard: Add gdk_clipboard_read_pixbuf_async()

8 years agogdk: Im[plement content deserializing
Benjamin Otte [Wed, 22 Nov 2017 09:44:30 +0000 (10:44 +0100)]
gdk: Im[plement content deserializing

Add infrastructure to do GInputStream => GType conversions. Use that to
implement gdk_clipboard_read_value() which reads into GValues.

8 years agox11: Improve debugging output for selection input stream
Benjamin Otte [Wed, 22 Nov 2017 09:43:04 +0000 (10:43 +0100)]
x11: Improve debugging output for selection input stream

8 years agoclipboard: Refactor gdk_clipboard_read() to be async
Benjamin Otte [Wed, 22 Nov 2017 08:25:35 +0000 (09:25 +0100)]
clipboard: Refactor gdk_clipboard_read() to be async

This allows us not just to pass any mime type to the read function, but
it also makes it possible to pass multiple mime types and the clipboard
can then try them in order until it finds a supported one.

This is so far not implemented though.

8 years agox11: Use async queue and implement sync reads on selections stream
Benjamin Otte [Mon, 20 Nov 2017 20:29:32 +0000 (21:29 +0100)]
x11: Use async queue and implement sync reads on selections stream

Turns out, way too many async operations are implemented by running the
sync operation in a thread. The easiest solution is to support that is
to use a GAsyncQueue for the buffers and deadlock if called from the
main thread.

8 years agotests: Add a new test app for GdkClipboard
Benjamin Otte [Mon, 20 Nov 2017 01:07:31 +0000 (02:07 +0100)]
tests: Add a new test app for GdkClipboard

8 years agoclipboard: Implement gdk_clipboard_read()
Benjamin Otte [Mon, 20 Nov 2017 01:06:21 +0000 (02:06 +0100)]
clipboard: Implement gdk_clipboard_read()

8 years agox11: Implement INCR reads
Benjamin Otte [Sun, 19 Nov 2017 19:52:36 +0000 (20:52 +0100)]
x11: Implement INCR reads

8 years agox11: Various clipboard cleanups
Benjamin Otte [Sun, 19 Nov 2017 18:52:07 +0000 (19:52 +0100)]
x11: Various clipboard cleanups

(1) Turn X11 clipboard event handling into a regular filter function
(2) Maintain a timestamp in the clipboard, so we can pass it when
    querying selections.

8 years agoclipboard: Add gdk_clipboard_claim_remote()
Benjamin Otte [Sun, 19 Nov 2017 18:18:22 +0000 (19:18 +0100)]
clipboard: Add gdk_clipboard_claim_remote()

This allows the remote clipboard to take over. The X11 clipboard already
does that.

8 years agox11: Add an initial clipboard implementation
Benjamin Otte [Sun, 19 Nov 2017 17:06:13 +0000 (18:06 +0100)]
x11: Add an initial clipboard implementation

This does nothing but download the targets and debug-print them.

8 years agogdk: A GdkClipboard API draft
Matthias Clasen [Thu, 29 May 2014 03:55:53 +0000 (23:55 -0400)]
gdk: A GdkClipboard API draft

This commit adds a GdkClipboard object which is intended to
replace GtkClipboard, eventually.

8 years agoGDK W32: Plug a resource leak
Руслан Ижбулатов [Mon, 4 Sep 2017 14:42:11 +0000 (14:42 +0000)]
GDK W32: Plug a resource leak

Ensure that surfaces allocated in the impl are destroyed in finalize()

https://bugzilla.gnome.org/show_bug.cgi?id=787089

8 years agoUpdate Polish translation
Piotr Drąg [Sat, 2 Dec 2017 17:45:33 +0000 (18:45 +0100)]
Update Polish translation

8 years agodnd: Add gtk_drag_set_icon_texture()
Benjamin Otte [Sat, 2 Dec 2017 13:28:05 +0000 (14:28 +0100)]
dnd: Add gtk_drag_set_icon_texture()

8 years agoselection: Add texture getter/setter
Benjamin Otte [Sat, 2 Dec 2017 13:25:35 +0000 (14:25 +0100)]
selection: Add texture getter/setter

8 years agoimage: Add gtk_image_new_from_texture()
Benjamin Otte [Sat, 2 Dec 2017 00:29:36 +0000 (01:29 +0100)]
image: Add gtk_image_new_from_texture()

Docs and header knew about this function.
There just was no implementation.

8 years agoimage: Store pixbufs as textures, not surfaces
Benjamin Otte [Fri, 1 Dec 2017 14:22:24 +0000 (15:22 +0100)]
image: Store pixbufs as textures, not surfaces

8 years agovulkan: Fix mask shader to premultiply color
Benjamin Otte [Fri, 1 Dec 2017 13:44:09 +0000 (14:44 +0100)]
vulkan: Fix mask shader to premultiply color

The inColor wasn't premultiplied, so the resulting colors were wrong
with translucent borders.

8 years agovulkan: Fix border shader to premultiply color
Benjamin Otte [Fri, 1 Dec 2017 13:32:38 +0000 (14:32 +0100)]
vulkan: Fix border shader to premultiply color

The inColor wasn't premultiplied, so the resulting colors were wrong
with translucent borders.

8 years agoGDK W32: Remove an unnecessary type check
Руслан Ижбулатов [Sun, 26 Nov 2017 13:15:53 +0000 (13:15 +0000)]
GDK W32: Remove an unnecessary type check

No idea why it's here, the hash table can store any kind of data,
there's no reason why it wouldn't be able to store an old X string type.
Might be a holdout from the old days, when strings were handled in
a special way (stored directly in the clipboard?).

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Make sure drag source window is not NULL
Руслан Ижбулатов [Sun, 26 Nov 2017 13:10:44 +0000 (13:10 +0000)]
GDK W32: Make sure drag source window is not NULL

This prevents GTK from throwing a bunch of warnings when it tries
to get drag source window -> screen of that window -> ipc widget for that screen,
and then tries to attach a signal handler to that widget.

Specifically, this happens when we get a DnD move from another
application.

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Special handling for DELETE requests
Руслан Ижбулатов [Sun, 26 Nov 2017 13:06:24 +0000 (13:06 +0000)]
GDK W32: Special handling for DELETE requests

1) Ensure that any DELETE requests from the target are sent to GDK, even if
   both the source and the target are in the same process and it
   is therefore possible to use a shortcut and call the handler directly
   in GTK layer
2) Ensure that target GDK doesn't do anything when GTK asks it to send
   a DELETE request, just report back immediately (the code up the stack
   does not check for successfullness when request is DELETE, so not giving
   it any data is OK).

The source code already synthesizes a DELETE request, so that side is
also taken care of.

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Preserve the target value for change_property()
Руслан Ижбулатов [Sun, 26 Nov 2017 00:21:22 +0000 (00:21 +0000)]
GDK W32: Preserve the target value for change_property()

We need to know the target atom value to know when we need to
do something with side-effects (since side-effects are expressed via
special target values). Previously, the code side-stepped that by looking
at the data type (which was rather unique for the one side-effect
target that we supported, signalled by the TARGETS target),
but for the DELETE target that seems to be no longer an option, hence the new
field to carry this information past the convert_selection() routine.

This prevents GDK from throwing a warning when trying to convert
a DELETE target, which has no format or data objects set.

The side-effects for the DELETE target happen earlier, in GTK layer.
By the point it gets to change_property(), it's a no-op.

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoFix a nefarious typo
Руслан Ижбулатов [Sat, 25 Nov 2017 17:04:48 +0000 (17:04 +0000)]
Fix a nefarious typo

8 years agoGDK W32: Ensure that selection request is processed
Руслан Ижбулатов [Mon, 18 Sep 2017 16:49:11 +0000 (16:49 +0000)]
GDK W32: Ensure that selection request is processed

To do that, run the message loop for one second or until the side-effect
of running the selection request handler is achieved (as opposed to
running it until the event is no longer queued).

The disavantage of this method is that if the event handling is
somehow missed (due to a variety of reasons - after all, it's not
a straight path from an event being queued to property_change()
being called), this will loop for one second. Since we do process
events during that time, this will not hang the application, but
might still restrict some of the functionality.

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Refuse to release mouse grab while in DnD mode
Руслан Ижбулатов [Thu, 14 Sep 2017 17:43:38 +0000 (17:43 +0000)]
GDK W32: Refuse to release mouse grab while in DnD mode

Handle WM_CANCELMODE and do nothing in response to it when DnD is
active. Otherwise pass it to DefWindowProc, which will call ReleaseCapture()
on our behalf.
This prevents us from losing mouse capture when alt-tabbing during DnD
(this includes the feature of Windows Explorer where dragging stuff over
a window button in the taskbar causes that window to receive focus, i.e.
keyboardless alt-tabbing).

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Update layered windows on opacity changes
Руслан Ижбулатов [Sat, 2 Sep 2017 15:25:36 +0000 (15:25 +0000)]
GDK W32: Update layered windows on opacity changes

Without this patch layered windows are only updated when they are moved
by the user or then their contents changes. This patch adds opacity
changes to the list of things that make GDK update a window. Without this
windows that don't redraw and are not moved by the used (DnD drag indicator
windows, for example) don't change their opacity.

(This commit is cherry-picked from the gtk-3-22 branch)

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoW32: Massive W32 DnD fix
Руслан Ижбулатов [Sat, 19 Aug 2017 12:06:27 +0000 (12:06 +0000)]
W32: Massive W32 DnD fix

Massive changes to OLE2 DnD protocol, which was completely broken before:
* Keep GdkDragContext and OLE2 objects separate (don't ref/unref them
  together, don't necessarily create them together).
* Keep IDataObject formats in the object itself, not in a global variable.
* Fix getdata() to look up the request target in its format list, not in the
  global hash table
* Create target GdkDragContext on each drag_enter, destroy it on drag_leave,
  whereas IDropTarget is created when a window becomes a drag destination
  and is re-used indefinitely.
* Query the source IDataObject for its supported types, cache them in the
  target (!) context. This is how GTK+ works, honestly.
* Remember current_src_object when we initiate a drag, to be able
  to detect later on that the data object is ours and use a
  shortcut when querying targets
* Make sure GDK_DRAG_MOTION is only sent when something changes
* Support GTK drag cursors
* Ensure that exotic GTK clipboard formats are registered
  (but try to avoid registering formats that can't be used between applications).
* Don't enumerate internal formats
* Ensure that DnD indicator window can't accept drags or receive any kind of input
  (use WS_EX_TRANSPARENT).
* Remove unneeded indentation in _gdk_win32_dnd_do_dragdrop()
* Fix indentation in gdk_win32_drag_context_drop_finish()
* Remove obsolete comments in _gdk_win32_window_register_dnd()
* Check for DnD in progress when processing WM_KILLFOCUS, don't emit a grab
  break event in such cases (this allows alt-tabbing while DnD is in progress,
  though there may be lingering issues with focus after dropping...)
* Support Shell ID List -> text/uri-list conversion, now it's possible
  to drop files (dragged from Explorer) on GTK+ applications
* Explicitly use RegisterClipboardFormatA() when we know that the string
  is not in unicode. Otherwise explicitly use RegisterClipboardFormatW()
  with a UTF8->UTF16 converted string
* Fix _gdk_win32_display_get_selection_owner() to correctly bail
  when selection owner HWND is NULL (looking up GdkWindow for NULL
  HWND always succeeds and returns the root window - not the intended
  effect)
* More logging
* Send DROP_FINISHED event after DnD loop ends
* Send STATUS event on feedback
* Move GetKeyboardState() and related code into _gdk_win32_window_drag_begin(),
  so that it's closer to the point where last_pt and start_pt are set
* Use & 0x80 to check for the key being pressed. Windows will set low-order bit
  to 1 for all mouse buttons to indicate that they are toggled, so simply
  checking for the value not being 0 is not enough anymore.
  This is probably a new thing in modern W32 that didn't exist before
  (OLE2 DnD code is old).
* Fixed (hopefully) and simplified HiDPI parts of the code.

Also adds managed DnD implementation for W32 GDK backend (for both
OLE2 and LOCAL protocols). Mostly a copy of the X11 backend code, but
there are some minor differences:
* doesn't use drag_window field in GdkDragContext,
  uses the one in GdkWin32DragContext exclusively
* subtracts hotspot offset from the window coordinates when showing
  the dragback animation
* tries to consistently support scaling and caches the scale
  in the context
* Some keynav code is removed (places where grabbing/ungrabbing should
  happen is marked with TODOs), and the rest is probably inert.

Also significantly changes the way selection (and clipboard) is handled
(as MSDN rightly notes, the handling for DnD and Clipboard
 formats is virtually the same, so it makes sense to handle
 both with the same code):
* Don't spam GDK_OWNER_CHANGE, send them only when owner
  actually changes
* Open clipboard when our process becomes the clipboard owner
  (we are doing it anyway, to empty the clipboard and *become* the owner),
  and then don't close it until a scheduled selection request event
  (with TARGETS target) is received. Process that event by announcing
  all of our supported formats (by that time add_targets() should have
  been called up the stack, thus the formats are known; just in case,
  add_targets() will also schedule a selection request, if one isn't
  scheduled already, so that late-coming formats can still be announced).
* Allow clipboard opening for selection_convert() to be delayed if it
  fails initially.
* The last two points above should fix all the bugs about GTK+ rising
  too much ruckus over OpenClipboard() failures, as owner change
  *is allowed* to fail (though not all callers currently handle
  that case), and selection_convert() is asynchronous to begin with.
  Still, this is somewhat risky, as there's a possibility that the
  code will work in unexpected ways and the clipboard will remain open.
  There's now logging to track the clipboard being opened and closed,
  and a number of failsafes that try to ensure that it isn't kept open
  for no reason.
* Added copious notes on the way clipboard works on X11, Windows and GDK-W32,
  also removed old comments in DnD implementation, replaced some of them
  with the new ones
* A lot of crufty module-global variables are stuffed into a singleton
  object, GdkWin32Selection. It's technically possible to make it a
  sub-object of the Display object (the way Wayland backend does),
  but since Display object on W32 is a singleton anyway... why bother?
* Fixed the send_change_events() a bit (was slightly broken in one of the
  previous iterations)
* Ensure that there's no confusion between selection conversion (an artifact
  term from X11) and selection transmutation (changing the data to be W32-compatible)
* Put all the transmutation code and format-target-matching code into gdkselection-win32.c,
  now this code isn't spread across multiple files.
* Consequently, moved some code away from gdkproperty-win32.c and gdkdnd-win32.c
* Extensive format transmutation checks for OLE2 DnD and clipboard.
  We now keep track of which format mappings are for transmutations,
  and which aren't (for example, when formats are passed as-is, or when
  a registered name is just an alias)
* Put transmutation code into separate functions

* Ensure that drop target keeps a format->target map for supported formats,
  this is useful when selection_convert() is called, as it only receives a
  single target and no hints on the format from which the data should
  be transmuted into this target.
* Add clear_targets() on W32, to de called by GTK
* Use g_set_object() instead of g_ref_object() where it is allowed.
* Fix indentation (and convert tabs to spaces), remove unused variables

(This commit is cherry-picked from the gtk-3-22 branch)

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Don't leak the atom name string
Руслан Ижбулатов [Tue, 22 Aug 2017 14:23:14 +0000 (14:23 +0000)]
GDK W32: Don't leak the atom name string

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: Fix a typo in OLE2 DnD code
Руслан Ижбулатов [Tue, 15 Aug 2017 13:12:43 +0000 (13:12 +0000)]
GDK W32: Fix a typo in OLE2 DnD code

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoOnly register application/x-rootwindow-drop on X11
Руслан Ижбулатов [Tue, 15 Aug 2017 13:07:01 +0000 (13:07 +0000)]
Only register application/x-rootwindow-drop on X11

application/x-rootwindow-drop is not useful anywhere else,
so put it under #ifdef GDK_WINDOWING_X11

On W32 this prevents toplevels from automatically becoming valid
drop targets with a useless drop type.

(This commit is cherry-picked from the gtk-3-22 branch)

https://bugzilla.gnome.org/show_bug.cgi?id=786509

8 years agoGDK W32: More flexible modal operation mode
Руслан Ижбулатов [Fri, 11 Aug 2017 07:00:41 +0000 (07:00 +0000)]
GDK W32: More flexible modal operation mode

Instead of using a boolean to indicate a modal operation being in progress,
use a set of flags, and allow these to be set and unset independently.

Specifically, this allows WM_CAPTURECHANGED handler to only act when a drag-move or
drag-resize modal operation is in progress, and ignore DND (which can also cause
WM_CAPTURECHANGED to be posted). This avoids a crash due to assertion failure when
OLE2 DND code tries to end a modal operation that was already ended by the WM_CAPTURECHANGED
handler.

(This commit is cherry-picked from the gtk-3-22 branch)

https://bugzilla.gnome.org/show_bug.cgi?id=786121

8 years agoGDK W32: fix monitor pruning code
Руслан Ижбулатов [Thu, 23 Nov 2017 07:15:28 +0000 (07:15 +0000)]
GDK W32: fix monitor pruning code

Decrement the counter for each removed element, otherwise we skip
one element every time we remove one. Also, no need for continue here.

8 years agoGDK W32: Correctly report window position in HiDPI mode
Руслан Ижбулатов [Fri, 29 Sep 2017 12:50:03 +0000 (12:50 +0000)]
GDK W32: Correctly report window position in HiDPI mode

Window position returned by get_frame_extents() should be scaled.

Also take this opportunity to apply the same rounding that X11 backend
applies.

https://bugzilla.gnome.org/show_bug.cgi?id=788053

8 years agoGDK-Win32: Fix AeroSnap on HiDPI
Chun-wei Fan [Tue, 8 Aug 2017 14:19:45 +0000 (22:19 +0800)]
GDK-Win32: Fix AeroSnap on HiDPI

Commit 1d0fad3 revealed that there were some assumptions made that were
actually to compensate for the bug fixed by that commit, so we need to
remove those assumptions as they would result in AerSnap to not work
properly on HiDPI screens.

Also re-do how we set the x and y positions of our GdkWindow, so that we
are more consistent across the board when we go between a GDK window
coordinate and a Windows API window cooredinate.

This would also simplify the code a bit.

https://bugzilla.gnome.org/show_bug.cgi?id=785999

8 years agoGDK W32: Handle drivers that do not send WT_CSRCHANGE after WT_PROXIMITY
Руслан Ижбулатов [Fri, 10 Feb 2017 10:49:00 +0000 (10:49 +0000)]
GDK W32: Handle drivers that do not send WT_CSRCHANGE after WT_PROXIMITY

Some drivers don't do that (not sure whether that is the correct behaviour
or not). Remember each WT_PROXIMITY with LOWORD(lParam) != 0 that we get,
then look for a WT_CSRCHANGE. If WT_CSRCHANGE doesn't come, but a WT_PACKET
does, assume that this device is the one that sent WT_PROXIMITY.

Also include fallback code to ensure that WT_PACKETs for an enabled device
disable the system pointer, because WT_PROXIMITY handler might have
enabled it by mistake, since it's not possible to know which device left
the proximity (it might have been a disabled device).

https://bugzilla.gnome.org/show_bug.cgi?id=778328

8 years agoGDK W32: Apply HiDPI scale properly to monitors
Руслан Ижбулатов [Fri, 17 Feb 2017 15:59:32 +0000 (15:59 +0000)]
GDK W32: Apply HiDPI scale properly to monitors

Previously HiDPI scale was retrieved and applied too late in the initialization
process to affect monitor size and monitor workarea size, but the code that
initializes these sizes *did* try to use the scale, even though it was always
getting scale=1.

To fix this, move the too-late code into monitor enumeration routine.
This also fixes a probable semantic bug where width and height were divided
by scale, again.

Now monitor and workarea should be in application pixels (i.e. divided by scale),
as intended.

https://bugzilla.gnome.org/show_bug.cgi?id=778835

8 years agoGDK W32: Different maximized window position for non-CSD windows
Руслан Ижбулатов [Thu, 26 Jan 2017 17:44:01 +0000 (17:44 +0000)]
GDK W32: Different maximized window position for non-CSD windows

It seems that WM interprets the same MINMAXINFO contents differently
depending on which styles the window has. Play along.

https://bugzilla.gnome.org/show_bug.cgi?id=765161

8 years agoGDK W32: Ensure that we use made-up monitors when there are none
Руслан Ижбулатов [Fri, 20 Jan 2017 10:23:00 +0000 (10:23 +0000)]
GDK W32: Ensure that we use made-up monitors when there are none

Previously GDK only made up monitors when it initially found none. Now it
also makes up monitors when it initially finds some, but later fails to get
their informatin in a normal way and finally prunes them out, being left with
zero monitors.

Having zero-length monitor array is unexpected and causes a number
of critical warnings and some critical functionality (such as displaying
drop-down menus) fails in such cases.

Ideally, there might be such a way to interrogate W32 API that produces the
information about non-real (but active) monitors out of it so that it isn't
necessary for us to make stuff up. However, this code is already complicated,
and i am not prepared to dig W32 API to find a way to do this.

This fixes the issues people had when they accessed a Windows desktop via RDP.

https://bugzilla.gnome.org/show_bug.cgi?id=777527

8 years agoGDK W32: Fix idiotic gdk_win32_display_get_monitor() implementation
Руслан Ижбулатов [Fri, 20 Jan 2017 09:08:41 +0000 (09:08 +0000)]
GDK W32: Fix idiotic gdk_win32_display_get_monitor() implementation

Replace the code borrowed from the X11 backend with the code borrowed from Wayland backend. Now GTK doesn't crash when the number of monitors is zero.

8 years agoGDK W32: Use keyboard hook to detect AeroSnap combinations better
Руслан Ижбулатов [Sat, 24 Dec 2016 21:01:23 +0000 (21:01 +0000)]
GDK W32: Use keyboard hook to detect AeroSnap combinations better

Windows WM handles AeroSnap for normal windows on keydown. We did this
on keyup only because we do not get a keydown message, even if Windows WM
does nothing with a combination. However, in some specific cases it DOES
do something - and we have no way to detect that. Specifically, winkey+downarrow
causes maximized window to be restored by WM, and GDK fails to detect that. Then
GDK gets a keyup message, figures that winkey+downarrow was pressed and released,
and handles the combination - by minimizing the window.

To overcome this, install a low-level keyboard hook (high-level ones have
the same problem as normal message loop - they don't get messages when
Windows WM handles combinations) and use it to detect interesting key combinations
before Windows WM has a chance to block them from being processed.

Once an interesting combination is detected, post a message to the window, which
will be handled in due order.

It should be noted that this code handles key repetitions in a very crude manner.

The downside is that AeroSnap will not work if hook installation function call fails.
Also, this is a global hook, and if the hook procedure does something wrong, bad things
can happen.

https://bugzilla.gnome.org/show_bug.cgi?id=776031

8 years agoGDK W32: Handle CapsLock as part of the key shift level
Руслан Ижбулатов [Wed, 4 Jan 2017 04:31:53 +0000 (04:31 +0000)]
GDK W32: Handle CapsLock as part of the key shift level

Instead of using some kind of flawed logic about modifying a keypress result
when CapsLock is toggled, just add a CapsLock shift level (and all derived
shift levels, i.e. Shift+CapsLock and CapsLock+AltGr and Shift+CapsLock+AltGr)
and query Windows keyboard layout API about the result of keypresses involving
CapsLock.

Keysym table is going to be (roughly) twice as large now, but CapsLock'ed
keypresses will give correct results for some keyboard layouts (such as
Czech keyboard layout, which without this change produces lowercase letters
for CapsLock->[0,2,3,4...] instead of uppercase ones).

Keymap update time also increases accordingly.

https://bugzilla.gnome.org/show_bug.cgi?id=165385

8 years agoGDK W32: Special handling for VK_PAUSE
Руслан Ижбулатов [Wed, 27 Jul 2016 18:05:10 +0000 (18:05 +0000)]
GDK W32: Special handling for VK_PAUSE

Similar to VK_DIVIDE, this key can't be mapped to a scancode by
MapVirtualKeyEx(). Googling suggests that this is a known bug.

https://bugzilla.gnome.org/show_bug.cgi?id=769214

8 years agoGDK W32: Change WM_SYSMENU style switch logic
Руслан Ижбулатов [Sun, 25 Dec 2016 17:48:20 +0000 (17:48 +0000)]
GDK W32: Change WM_SYSMENU style switch logic

Instead of checking for window state and giving it extra styles that
fit, just give it all styles that it is missing. It turned out that
otherwise it is impossible to, for example, restore a maximized window
via sysmenu. Also, be more flexible towards GDK/WM window state mismatches
and consider the window minimized/maximized if *either* GDK or WM thinks so.

https://bugzilla.gnome.org/show_bug.cgi?id=776485

8 years agoGDK W32: Remove unneeded assertion
Руслан Ижбулатов [Mon, 9 Jan 2017 09:53:46 +0000 (09:53 +0000)]
GDK W32: Remove unneeded assertion

Just set check_for_dpi_awareness = TRUE and eventually it will be handled
correctly, even if setDpiAwareFunc() returns E_ACCESSDENIED or shcore functions
are NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=777031

8 years agoGDK W32: Handle maximizing correctly for small primary monitors
Руслан Ижбулатов [Sun, 11 Dec 2016 16:26:34 +0000 (16:26 +0000)]
GDK W32: Handle maximizing correctly for small primary monitors

When primary monitor is smaller than the actual monitor on which the
window is being maximized, the WM will do widnow size adjustments
that will completely screw the window size if we try to make it
smaller than 100% fullscreen (to account for taskbar size, for example).

Fix this by overriding maximized window size during WM_WINDOWPOSCHANGING.

https://bugzilla.gnome.org/show_bug.cgi?id=775808

8 years agoGDK: Make sure W32 backend compiles without GdkDeviceManager
Руслан Ижбулатов [Thu, 30 Nov 2017 05:38:20 +0000 (05:38 +0000)]
GDK: Make sure W32 backend compiles without GdkDeviceManager

https://bugzilla.gnome.org/show_bug.cgi?id=773299

8 years agogtkeventcontrollerscroll: Add some docs
Carlos Garnacho [Fri, 1 Dec 2017 23:18:07 +0000 (00:18 +0100)]
gtkeventcontrollerscroll: Add some docs

8 years agoAdd GtkEventControllerScroll to the docs
Matthias Clasen [Fri, 1 Dec 2017 22:17:04 +0000 (14:17 -0800)]
Add GtkEventControllerScroll to the docs

It is not actually documented yet, unfortunately.

8 years agodocs: Some revision to the migration docs
Matthias Clasen [Fri, 1 Dec 2017 15:29:14 +0000 (10:29 -0500)]
docs: Some revision to the migration docs

Cover more of the recent changes, and revise some of the wording.

8 years agoFinish conversion of pixbuf cell renderer icon size
Matthias Clasen [Fri, 1 Dec 2017 15:26:51 +0000 (10:26 -0500)]
Finish conversion of pixbuf cell renderer icon size

Change the name of the property from stock-size to icon-size,
and make it an enum property instead of uint. This makes it
impossible to specify invalid numeric values in ui files, and
at the same time makes it possible to refer to the existing
values by their nick.

Fix up the callers.

8 years agoplacesview: Drop the word stock from the docs
Matthias Clasen [Fri, 1 Dec 2017 15:26:21 +0000 (10:26 -0500)]
placesview: Drop the word stock from the docs

It does not really add anything here, and makes it harder
to grep for occurrences of stock ids.

8 years agorecent chooser: Stop specifying stock-size
Matthias Clasen [Fri, 1 Dec 2017 15:25:17 +0000 (10:25 -0500)]
recent chooser: Stop specifying stock-size

We were using a no-longer-existing numeric value here,
and we can just rely on the theme to set this now.

8 years agotoolbutton: Remove the word stock from internal docs
Matthias Clasen [Fri, 1 Dec 2017 15:21:59 +0000 (10:21 -0500)]
toolbutton: Remove the word stock from internal docs

We no longer support stock items.

8 years agorecent chooser: Remove the word stock from the docs
Matthias Clasen [Fri, 1 Dec 2017 15:19:32 +0000 (10:19 -0500)]
recent chooser: Remove the word stock from the docs

We don't support stock items anymore.

8 years agofilechooser: Remove the word stock from the docs
Matthias Clasen [Fri, 1 Dec 2017 15:16:20 +0000 (10:16 -0500)]
filechooser: Remove the word stock from the docs

It does not really add anything here, and makes it harder
to grep for occurrences of stock ids.

8 years agoentry: Remove references to stock ids from the docs
Matthias Clasen [Fri, 1 Dec 2017 15:14:10 +0000 (10:14 -0500)]
entry: Remove references to stock ids from the docs

We no longer support stock images.

8 years agoimage definition: Drop unused struct
Matthias Clasen [Fri, 1 Dec 2017 15:12:17 +0000 (10:12 -0500)]
image definition: Drop unused struct

We no longer support stock images.

8 years agoFix the doc tools build
Matthias Clasen [Fri, 1 Dec 2017 14:43:52 +0000 (09:43 -0500)]
Fix the doc tools build

8 years agowidget-factory: Fix up icon size handling
Matthias Clasen [Fri, 1 Dec 2017 14:25:13 +0000 (09:25 -0500)]
widget-factory: Fix up icon size handling

Make the icon grid on page 2 work with our new
approach to icon sizes.

8 years agoRevert "gtksnapshot: Merge trivial clip duplicates"
Alexander Larsson [Fri, 1 Dec 2017 08:08:57 +0000 (09:08 +0100)]
Revert "gtksnapshot: Merge trivial clip duplicates"

This reverts commit d95cbb275729370a2dd67e24570ac1c68b62b697.

This is better solved by commit 94184eda4214b3162eead554212443b3a0f50481

8 years agosnapashot: Optimize rounded clip nodes
Timm Bäder [Fri, 1 Dec 2017 07:04:31 +0000 (08:04 +0100)]
snapashot: Optimize rounded clip nodes

If the rounded clip node is rectilinear, we can simplify it to a normal
clip node. If not, we really need to use a rounded clip node. In both
cases, we can do the same check we do when collecting normal clips and
avoid the clip node altogether if the child node does not get clipped
anyway.

This saves between 3 and 10 nodes in the widget factory, depending on
what page gets rendered.

8 years agosnapshot: Only create clip nodes if we need to
Timm Bäder [Fri, 1 Dec 2017 06:38:43 +0000 (07:38 +0100)]
snapshot: Only create clip nodes if we need to

Clip nodes have a clip rect and we only need to actually create a clip
node if any child node gets clipped at all. If the clip rect conains the
child node bounds entirely, we don't need a clip node.

8 years agowidgetbowl: Only use one widget type
Timm Bäder [Fri, 24 Nov 2017 11:50:47 +0000 (12:50 +0100)]
widgetbowl: Only use one widget type

Every added widget having a separate random widget type makes it useless
to use the widgetbowl demo for any sort of performance comparison.
Instead. use only one widget type for all the moving children but make
that changable.

8 years agowayland: Never send NULL app id
Timm Bäder [Fri, 17 Nov 2017 19:07:18 +0000 (20:07 +0100)]
wayland: Never send NULL app id

The old gdk_get_program_class was never returning NULL, but
g_get_prgname might. So use the same fallback app id name we were using
before.

8 years agoGskVulkanGlyphCache: Remove unused struct member
Timm Bäder [Fri, 17 Nov 2017 19:32:11 +0000 (20:32 +0100)]
GskVulkanGlyphCache: Remove unused struct member

8 years agowindow: Plug a memory leak
Timm Bäder [Sun, 19 Nov 2017 17:55:32 +0000 (18:55 +0100)]
window: Plug a memory leak

8 years agoDrop unused gtkcssstylefuncs.c
Matthias Clasen [Thu, 30 Nov 2017 23:46:54 +0000 (18:46 -0500)]
Drop unused gtkcssstylefuncs.c

Clean up all the places where the header was still
included needlessly.

8 years agocss style funcs: Avoid pixbufs
Matthias Clasen [Thu, 30 Nov 2017 22:40:41 +0000 (17:40 -0500)]
css style funcs: Avoid pixbufs

We can get what we need with GdkTexture.

8 years agoAvoid GdkPixbuf in docs
Matthias Clasen [Thu, 30 Nov 2017 22:32:05 +0000 (17:32 -0500)]
Avoid GdkPixbuf in docs

GdkTexture is preferred now.

8 years agoicon helper: Avoid gratitious pixbuf use
Matthias Clasen [Thu, 30 Nov 2017 22:31:17 +0000 (17:31 -0500)]
icon helper: Avoid gratitious pixbuf use

We can just get the texture directly from the icontheme.

8 years agomountoperation: Store icons as textures
Matthias Clasen [Thu, 30 Nov 2017 21:39:14 +0000 (16:39 -0500)]
mountoperation: Store icons as textures

This reduces the amount of pixbufs in this code.

8 years agobroadway: Add some (disabled) debugging tools
Alexander Larsson [Thu, 30 Nov 2017 16:50:46 +0000 (17:50 +0100)]
broadway: Add some (disabled) debugging tools

8 years agobroadway: Don't send node updates to browser if nothing changed
Alexander Larsson [Thu, 30 Nov 2017 16:32:01 +0000 (17:32 +0100)]
broadway: Don't send node updates to browser if nothing changed

8 years agobroadway: Fix texture hash function
Alexander Larsson [Thu, 30 Nov 2017 16:30:27 +0000 (17:30 +0100)]
broadway: Fix texture hash function

8 years agogtksnapshot: Merge trivial clip duplicates
Alexander Larsson [Thu, 30 Nov 2017 14:31:46 +0000 (15:31 +0100)]
gtksnapshot: Merge trivial clip duplicates

I got a lot of "clip in clip" cases, for example a CellClip with a
CellTextClip inside. It is really trivial to merge these when we
pop and makes it easier for all backends, so lets do that.

8 years agovulkan: Don't crash if vkEnumeratePhysicalDevices fails
Alexander Larsson [Thu, 30 Nov 2017 13:48:15 +0000 (14:48 +0100)]
vulkan: Don't crash if vkEnumeratePhysicalDevices fails

8 years agobroadway: Improve logging
Alexander Larsson [Thu, 30 Nov 2017 13:47:08 +0000 (14:47 +0100)]
broadway: Improve logging

We now log backwards, so that the latest is always visible.
Also, we use <pre> with a smaller size.

8 years agobroadway: Send diffs of node trees
Alexander Larsson [Thu, 30 Nov 2017 09:36:30 +0000 (10:36 +0100)]
broadway: Send diffs of node trees

Reusing pre-created nodes is a lot faster both in terms of
dom modifications and of transfer sizes.

8 years agobroadway: Add broadway_node_equal
Alexander Larsson [Wed, 29 Nov 2017 19:05:36 +0000 (20:05 +0100)]
broadway: Add broadway_node_equal

8 years agobroadway: Prepare for implementing diff
Alexander Larsson [Wed, 29 Nov 2017 19:05:02 +0000 (20:05 +0100)]
broadway: Prepare for implementing diff